package java_learn.java_web.基础增强.反射;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * 框架类
 *
 * @Author: 李浩然
 * @Date: 2021/5/24 3:34 下午
 */
public class ReflectTest {
    //可以创建任意类的对象，可以执行任意方法

    /*
        前提：不能改变该类的任何代码。可以创建任意类的对象，可以执行任意方法
     */
    public static void main(String[] args) throws Exception {
/*            Person p=new Person();
            p.eat();

            Student student=new Student();
            student.sleep();*/

        //1.加载配置文件
        //1.1创建Properties对象
        Properties properties = new Properties();
        //1.2加载配置文件，转换为一个集合
        //1.2.1获取class目录下的配置文件
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("pro.properties");
        InputStreamReader isr = new InputStreamReader(is);
        properties.load(isr);
        //2.获取配置文件中定义的数据
        String className = properties.getProperty("className");
        String methodName = properties.getProperty("methodName");
        //2.获取配置文件中定义的数据
        //3.加载该类进内存
        Class cls = Class.forName(className);
        //4.创建对象
        Object o = cls.newInstance();
        //5.获取方法对象
        Method method = cls.getMethod(methodName);
        //6.执行方法
        method.invoke(o);


    }
}
